#include <stdio.h>

//当发现两个变量不用同时出现的时候，就可以使用联合体（比如一个变量此时需要一个int空间，另一个变量在另一个时候需要一个char的空间）
#if 0
    //共享一块内存
    union data
    {
        int a;
        char b;
    };

    int main()
    {
        union data d;   //它的名字不是单独的data，而是union data，两个合起来才能叫定义一个联合体
        d.a = 97;
        printf("%c\n", d.b); //它们共享一块内存

        printf("%ld\n", sizeof(d)); //既然共用，那么内存得看最大的类型的大小

        return 0;
    }
#endif

#if 0
    //联合体依旧遵循字节对齐的规则
    union data
    {
        int a;
        char b[5];  //它的内存需求更大
    };

    int main()
    {
        union data d;

        printf("%ld\n", sizeof(d));

        return 0;
    }
#endif

#if 1
    union data
    {
        int a;
        char b;
    };

    int main()
    {
        union data d;

        d.a = 0x12345678;
        printf("%x\n", d.b);
        return 0;
    }
#endif